package cc.ok200.api.common;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 全局异常处理器
 * 统一处理应用中抛出的各类异常，并返回标准化的错误响应
 */
@RestControllerAdvice
public class GlobalExceptionHandler {
    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    /**
     * 处理ApiException类型的异常
     * 这类异常通常是由参数验证失败引起的
     * 
     * @param e API异常
     * @return API结果对象
     */
    @ExceptionHandler(ApiException.class)
    public ApiResponse handleApiException(ApiException e) {
        logger.warn("API异常: {}", e.getMessage());
        
        // 创建响应并直接设置code和msg
        ApiResponse result = new ApiResponse(e.getCode(), e.getMessage());
        return result;
    }
    
    /**
     * 处理所有其他类型的异常
     * 对于未明确捕获的异常，返回通用的服务器错误消息
     * 
     * @param e 任何类型的异常
     * @return API结果对象
     */
    @ExceptionHandler(Exception.class)
    public ApiResponse handleAllExceptions(Exception e) {
        // 记录详细的异常信息，方便排查问题
        logger.error("系统异常", e);
        
        // 创建响应并直接设置code和msg
        ApiResponse result = new ApiResponse("error", "服务器繁忙");
        return result;
    }
} 